package com.dingding.facade.account.user.service;

import java.math.BigDecimal;

import com.dingding.common.core.beans.Useraccount;
import com.dingding.common.core.beans.Userintegral;

/**
 * @Description:用户账户接口
 * @author fengshuonan
 * @date 2016年6月3日 下午8:49:54
 */

public interface IUserAccountService {

	/**
	 * 
	 * @Description:获取有用户账户
	 * @param loginId 用户登录id
	 * @author fengshuonan
	 * @return Useraccount
	 * 
	 */
	public Useraccount getUserAccount(String loginId);

	/**
	 * @Description: 扣除剩余金钱
	 * @param loginId 登录id
	 * @param fee 费用
	 * @author fengshuonan
	 * @return boolean true 扣除成功   false 扣除失败
	 */
	public boolean deductRemainMoney(String loginId, BigDecimal fee);

	/**
	 * @Description: 扣除剩余金钱（出租车）
	 * @param loginId 登录id
	 * @param fee 费用
	 * @author YHQ
	 * @since V2.5.4
	 * @return boolean true 扣除成功   false 扣除失败
	 */
	public boolean taxiDeductRemainMoney(String loginId, BigDecimal fee);
	
	/**
	 * @Description: 充值
	 * @param loginId
	 *            登录id
	 * @param fee
	 *            费用
	 * @author CHEHUANBO
	 * @return boolean true 扣除成功 false 扣除失败
	 */
	public boolean recharge(String loginId, BigDecimal fee);

	
	/**
	 * 
	 * @Title: refunds 
	 * @Description: 给乘客退款(顺风车) 
	 * @param loginId 用户Id
	 * @param fee 退款金额
	 * @author YHQ 
	 * @since V2.5.4
	 * @return boolean    返回类型
	 */
	public boolean refunds(String loginId, BigDecimal fee);
	
	/**
	 * 
	 * @Title: transferAccounts 
	 * @Description: 转账操作
	 * @param loginId 用户Id
	 * @param fee 转账金额
	 * @author YHQ 
	 * @since V2.5.4
	 * @return boolean    返回类型
	 */
	public boolean transferAccounts(String loginId, BigDecimal fee);
	
	/**
	 * @Description 给司机账户转账
	 * @param loginId 司机的登录id
	 * @param fee 费用
	 * @author fengshuonan
	 * @return boolean
	 */
	public boolean transferAccountsDriver(String loginId, BigDecimal fee);
	
	/**
	 * @Description: 添加交易明细
	 * @param userId 用户id
	 * @param tradeMoney 交易金额
	 * @param type 交易类型（1:收入 2: 支出 3:提现 4:取消）
	 * @author fengshuonan
	 * @return void
	 */
	public void addAccountDetail(String userId, BigDecimal tradeMoney, BigDecimal actualPaymentMoney, BigDecimal couponMoney,
			int type);

	/**
	 * 
	 * @Title: updateAccount 
	 * @Description: 修改用户账户信息
	 * @param useraccount 用户账户信息
	 * @author YHQ 
	 * @return void    返回类型
	 * 
	 */
	public void updateAccount(Useraccount useraccount);

	/**
	 * 
	 * @Description: 获取用户积分
	 * @param userId 用户id
	 * @author fengshuonan
	 * @return Userintegral
	 * @since 2.3.0
	 * 
	 */
	public Userintegral getUserIntegral(String userId);

}
